Avastage Vite'i pluginate arhitektuuri ja Ôppige looma kohandatud pluginaid oma arendusprotsessi tÀiustamiseks. Omandage pÔhimÔisted praktiliste nÀidetega.
Vite'i pluginate arhitektuuri lahtiseletamine: Globaalne juhend kohandatud pluginate loomiseks
Vite, vĂ€lkkiire ehitustööriist, on revolutsiooniliselt muutnud front-end arendust. Selle kiirus ja lihtsus tulenevad suuresti selle vĂ”imsast pluginate arhitektuurist. See arhitektuur vĂ”imaldab arendajatel laiendada Vite'i funktsionaalsust ja kohandada seda vastavalt oma konkreetsetele projekti vajadustele. See juhend pakub pĂ”hjalikku ĂŒlevaadet Vite'i pluginate sĂŒsteemist, andes teile vĂ”imaluse luua oma kohandatud pluginaid ja optimeerida oma arendusprotsessi.
Vite'i pÔhiprintsiipide mÔistmine
Enne pluginate loomisesse sukeldumist on oluline mÔista Vite'i aluspÔhimÔtteid:
- NÔudepÔhine kompileerimine: Vite kompileerib koodi ainult siis, kui brauser seda nÔuab, vÀhendades oluliselt kÀivitusaega.
- Natiivne ESM: Vite kasutab arenduses natiivseid ECMAScript mooduleid (ESM), mis vÀlistab vajaduse arenduse ajal koodi kokku pakkida (bundling).
- Rollupil pÔhinev produktsiooni ehitus: Produktsiooni ehituste jaoks kasutab Vite Rollupi, kÔrgelt optimeeritud pakkijat, et genereerida tÔhusat ja produktsioonivalmis koodi.
Pluginate roll Vite'i ökosĂŒsteemis
Vite'i pluginate arhitektuur on loodud olema vÀga laiendatav. Pluginad saavad:
- Teisendada koodi (nt TypeScripti transpileerimine, eeltöötlejate lisamine).
- Pakkuda kohandatud faile (nt staatiliste varade kÀsitlemine, virtuaalsete moodulite loomine).
- Muuta ehitusprotsessi (nt piltide optimeerimine, service worker'ite genereerimine).
- Laiendada Vite'i CLI-d (nt kohandatud kÀskude lisamine).
Pluginad on vÔti Vite'i kohandamiseks erinevatele projektinÔuetele, alates lihtsatest muudatustest kuni keerukate integratsioonideni.
Vite'i pluginate arhitektuur: SĂŒvaanalĂŒĂŒs
Vite'i plugin on sisuliselt JavaScripti objekt spetsiifiliste omadustega, mis mÀÀravad selle kÀitumise. Vaatleme peamisi elemente:
Plugina seadistamine
Fail vite.config.js (vÔi vite.config.ts) on koht, kus seadistate oma Vite'i projekti, sealhulgas mÀÀrate, milliseid pluginaid kasutada. Valik plugins aktsepteerib pluginate objektide massiivi vÔi funktsioone, mis tagastavad pluginate objekte.
// vite.config.js
import myPlugin from './my-plugin';
export default {
plugins: [
myPlugin(), // Invoke the plugin function to create a plugin instance
],
};
Plugina objekti omadused
Vite'i plugina objektil vĂ”ib olla mitu omadust, mis mÀÀravad selle kĂ€itumise ehitusprotsessi erinevates faasides. Siin on ĂŒlevaade kĂ”ige levinumatest omadustest:
- name: Unikaalne nimi pluginale. See on kohustuslik ja aitab silumisel ja konfliktide lahendamisel. NĂ€ide: `'my-custom-plugin'`
- enforce: MÀÀrab plugina tÀitmise jÀrjekorra. VÔimalikud vÀÀrtused on `'pre'` (kÀivitatakse enne tuumpluginaid), `'normal'` (vaikimisi) ja `'post'` (kÀivitatakse pÀrast tuumpluginaid). NÀide: `'pre'`
- config: VÔimaldab muuta Vite'i konfiguratsiooniobjekti. See saab kasutaja konfiguratsiooni ja keskkonna (mode ja command). NÀide: `config: (config, { mode, command }) => { ... }`
- configResolved: Kutsutakse vÀlja pÀrast seda, kui Vite'i konfiguratsioon on tÀielikult lahendatud. Kasulik lÔpliku konfiguratsiooniobjekti kÀttesaamiseks. NÀide: `configResolved(config) { ... }`
- configureServer: Annab juurdepÀÀsu arendusserveri instantsile (Connect/Express-sarnane). Kasulik kohandatud vahevara lisamiseks vÔi serveri kÀitumise muutmiseks. NÀide: `configureServer(server) { ... }`
- transformIndexHtml: VÔimaldab teisendada faili `index.html`. Kasulik skriptide, stiilide vÔi meta-tagide sisestamiseks. NÀide: `transformIndexHtml(html) { ... }`
- resolveId: VÔimaldab pealt kuulata ja muuta moodulite lahendamist. Kasulik kohandatud moodulite lahendamise loogika jaoks. NÀide: `resolveId(source, importer) { ... }`
- load: VÔimaldab laadida kohandatud mooduleid vÔi muuta olemasolevate moodulite sisu. Kasulik virtuaalsete moodulite vÔi kohandatud laadijate jaoks. NÀide: `load(id) { ... }`
- transform: Teisendab moodulite lÀhtekoodi. Sarnane Babeli plugina vÔi PostCSS-i pluginaga. NÀide: `transform(code, id) { ... }`
- buildStart: Kutsutakse vÀlja ehitusprotsessi alguses. NÀide: `buildStart() { ... }`
- buildEnd: Kutsutakse vÀlja pÀrast ehitusprotsessi lÔppu. NÀide: `buildEnd() { ... }`
- closeBundle: Kutsutakse vÀlja pÀrast seda, kui bundle on kettale kirjutatud. NÀide: `closeBundle() { ... }`
- writeBundle: Kutsutakse vÀlja enne bundle'i kettale kirjutamist, vÔimaldades muutmist. NÀide: `writeBundle(options, bundle) { ... }`
- renderError: VÔimaldab arenduse ajal kuvada kohandatud vealehti. NÀide: `renderError(error, req, res) { ... }`
- handleHotUpdate: VÔimaldab HMR-i peenelt kontrollida. NÀide: `handleHotUpdate({ file, server }) { ... }`
Pluginate "haagid" (hooks) ja tÀitmise jÀrjekord
Vite'i pluginad töötavad lĂ€bi "haakide" (hooks) seeria, mis kĂ€ivitatakse ehitusprotsessi erinevates etappides. Nende haakide tĂ€itmise jĂ€rjekorra mĂ”istmine on tĂ”husate pluginate kirjutamiseks ĂŒlioluline.
- config: Muuda Vite'i konfiguratsiooni.
- configResolved: PÀÀse ligi lahendatud konfiguratsioonile.
- configureServer: Muuda arendusserverit (ainult arenduses).
- transformIndexHtml: Teisenda fail `index.html`.
- buildStart: Ehitusprotsessi algus.
- resolveId: Lahenda moodulite ID-d.
- load: Laadi mooduli sisu.
- transform: Teisenda mooduli kood.
- handleHotUpdate: Halda kiiret moodulivahetust (HMR).
- writeBundle: Muuda vÀljund-bundle'it enne kettale kirjutamist.
- closeBundle: Kutsutakse vÀlja pÀrast vÀljund-bundle'i kettale kirjutamist.
- buildEnd: Ehitusprotsessi lÔpp.
Oma esimese kohandatud Vite'i plugina loomine
Loome lihtsa Vite'i plugina, mis lisab produktsiooni ehituses iga JavaScripti faili algusesse bÀnneri. See bÀnner sisaldab projekti nime ja versiooni.
Plugina implementatsioon
// banner-plugin.js
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
export default function bannerPlugin() {
return {
name: 'banner-plugin',
apply: 'build',
transform(code, id) {
if (!id.endsWith('.js')) {
return code;
}
const packageJsonPath = resolve(process.cwd(), 'package.json');
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
const banner = `/**\n * Project: ${packageJson.name}\n * Version: ${packageJson.version}\n */\n`;
return banner + code;
},
};
}
Selgitus:
- name: MÀÀrab plugina nime, 'banner-plugin'.
- apply: MÀÀrab, et see plugin peaks kÀivituma ainult ehitusprotsessi ajal. Selle vÀÀrtuseks 'build' seadmine muudab selle ainult produktsiooni jaoks mÔeldud pluginaks, vÀltides tarbetut koormust arenduse ajal.
- transform(code, id):
- See on plugina tuum. See pĂŒĂŒab kinni iga mooduli koodi (`code`) ja ID (`id`).
- Tingimuslik kontroll: `if (!id.endsWith('.js'))` tagab, et teisendus rakendub ainult JavaScripti failidele. See hoiab Ă€ra teiste failitĂŒĂŒpide (nagu CSS vĂ”i HTML) töötlemise, mis vĂ”iks pĂ”hjustada vigu vĂ”i ootamatut kĂ€itumist.
- JuurdepÀÀs failile package.json:
- `resolve(process.cwd(), 'package.json')` konstrueerib absoluutse tee failini `package.json`. `process.cwd()` tagastab praeguse töökataloogi, tagades Ôige tee kasutamise olenemata sellest, kust kÀsk kÀivitatakse.
- `JSON.parse(readFileSync(packageJsonPath, 'utf-8'))` loeb ja parssib faili `package.json`. `readFileSync` loeb faili sĂŒnkroonselt ja `'utf-8'` mÀÀrab kodeeringu Unicode'i mĂ€rkide korrektseks kĂ€sitlemiseks. SĂŒnkroonne lugemine on siin vastuvĂ”etav, kuna see toimub teisenduse alguses ĂŒks kord.
- BĂ€nneri genereerimine:
- ``const banner = `/**\n * Project: ${packageJson.name}\n * Version: ${packageJson.version}\n */\n`;`` loob bĂ€nneri stringi. See kasutab mall-literaale (tagurpidi ĂŒlakomasid), et hĂ”lpsasti lisada projekti nimi ja versioon failist `package.json`. `\n` jĂ€rjestused lisavad reavahetusi bĂ€nneri korrektseks vormindamiseks.
- Koodi teisendamine: `return banner + code;` lisab bÀnneri algse JavaScripti koodi ette. See on transform-funktsiooni poolt tagastatav lÔpptulemus.
Plugina integreerimine
Importige plugin oma vite.config.js faili ja lisage see plugins massiivi:
// vite.config.js
import bannerPlugin from './banner-plugin';
export default {
plugins: [
bannerPlugin(),
],
};
Ehituse kÀivitamine
NĂŒĂŒd kĂ€ivitage `npm run build` (vĂ”i oma projekti ehituskĂ€sk). PĂ€rast ehituse lĂ”ppu kontrollige genereeritud JavaScripti faile `dist` kaustas. NĂ€ete bĂ€nnerit iga faili ĂŒlaosas.
TĂ€iustatud pluginate tehnikad
Lisaks lihtsatele koodi teisendustele saavad Vite'i pluginad kasutada oma vÔimekuse suurendamiseks tÀiustatud tehnikaid.
Virtuaalsed moodulid
Virtuaalsed moodulid vĂ”imaldavad pluginatel luua mooduleid, mida tegelikult failidena kettal ei eksisteeri. See on kasulik dĂŒnaamilise sisu genereerimiseks vĂ”i konfiguratsiooniandmete pakkumiseks rakendusele.
// virtual-module-plugin.js
export default function virtualModulePlugin(options) {
const virtualModuleId = 'virtual:my-module';
const resolvedVirtualModuleId = '\0' + virtualModuleId; // Prefix with \0 to prevent Rollup from processing
return {
name: 'virtual-module-plugin',
resolveId(id) {
if (id === virtualModuleId) {
return resolvedVirtualModuleId;
}
},
load(id) {
if (id === resolvedVirtualModuleId) {
return `export default ${JSON.stringify(options)};`;
}
},
};
}
Selles nÀites:
- `virtualModuleId` on string, mis esindab virtuaalse mooduli identifikaatorit.
- `resolvedVirtualModuleId` on eesliitega `\0`, et takistada Rollupil seda reaalse failina töötlemast. See on Rollupi pluginates kasutatav konventsioon.
- `resolveId` pĂŒĂŒab kinni mooduli lahendamise ja tagastab lahendatud virtuaalse mooduli ID, kui nĂ”utud ID vastab `virtualModuleId`-le.
- `load` pĂŒĂŒab kinni mooduli laadimise ja tagastab mooduli koodi, kui nĂ”utud ID vastab `resolvedVirtualModuleId`-le. Sel juhul genereerib see JavaScripti mooduli, mis ekspordib `options` vaikeekspordina.
Virtuaalse mooduli kasutamine
// vite.config.js
import virtualModulePlugin from './virtual-module-plugin';
export default {
plugins: [
virtualModulePlugin({ message: 'Hello from virtual module!' }),
],
};
// main.js
import message from 'virtual:my-module';
console.log(message.message); // Output: Hello from virtual module!
Index HTML-i teisendamine
transformIndexHtml haak vĂ”imaldab teil muuta index.html faili, nĂ€iteks sisestades skripte, stiile vĂ”i meta-tĂ€ge. See on kasulik analĂŒĂŒtika jĂ€lgimise lisamiseks, sotsiaalmeedia metaandmete seadistamiseks vĂ”i HTML-struktuuri kohandamiseks.
// inject-script-plugin.js
export default function injectScriptPlugin() {
return {
name: 'inject-script-plugin',
transformIndexHtml(html) {
return html.replace(
'